home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Joystick Magazine 1996 May
/
cd joy 71No13.iso
/
pc
/
demos
/
waynegre
/
myv.cod
< prev
next >
Wrap
Text File
|
1994-10-25
|
10KB
|
326 lines
; Static Name Aliases
;
TITLE d:\peter\myv.c
.MODEL LARGE
.386p
.387
INCLUDELIB LLIBCE
INCLUDELIB OLDNAMES.LIB
MYV_TEXT SEGMENT WORD USE16 PUBLIC 'CODE'
MYV_TEXT ENDS
_DATA SEGMENT WORD USE16 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT WORD USE16 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT WORD USE16 PUBLIC 'BSS'
_BSS ENDS
DGROUP GROUP CONST, _BSS, _DATA
ASSUME DS: DGROUP, SS: DGROUP
PUBLIC _VDestPtr
PUBLIC _VSrcPtr
PUBLIC _VSrcBPL
PUBLIC _VSegAdd
PUBLIC _VOffAdd
_DATA SEGMENT
_VDestPtr DD 00H
_VSrcPtr DD 00H
_VSrcBPL DW 00H
_VSegAdd DW 00H
_VOffAdd DW 00H
PUBLIC _myVirtualVirtual
_myVirtualVirtual PROC FAR ; COMDAT
;|*** //#include <stdio.h>
;|*** //#include <stdlib.h>
;|*** #include <dos.h>
;|*** //#include <bios.h>
;|*** #include <ctype.h>
;|***
;|*** char far *VDestPtr = 0;
;|*** char far *VSrcPtr = 0;
;|***
;|*** unsigned int VSrcBPL = 0, VSegAdd = 0, VOffAdd = 0;
;|***
;|*** ///////////////////////////////////////////////////////////////////
;|*** //////////////////////////////////////////////////////////////////
;|*** int myVirtualVirtual(int nrLines, int fromBPL, int toBPL)
;|*** {
; Line 15
*** 000000 c8 0a 00 00 enter 10,0
*** 000004 57 push di
*** 000005 56 push si
; nrLines = 6
; fromBPL = 8
; toBPL = 10
; retcode = -2
; yy = -6
; fseg = -4
; foff = -8
; fbpl = -10
; fbplmod = -4
; to_bpl = -6
;|*** int retcode = 0;
;|***
;|*** register yy = nrLines;
; Line 18
*** 000006 8b 46 06 mov ax,WORD PTR [bp+6] ;nrLines
*** 000009 89 46 fa mov WORD PTR [bp-6],ax ;yy
;|*** register unsigned fseg, foff;
;|*** register int fbpl = fromBPL / 16;
; Line 20
*** 00000c 8b 46 08 mov ax,WORD PTR [bp+8] ;fromBPL
*** 00000f 99 cwd
*** 000010 83 e2 0f and dx,15 ;000fH
*** 000013 03 c2 add ax,dx
*** 000015 c1 f8 04 sar ax,4
*** 000018 89 46 f6 mov WORD PTR [bp-10],ax ;fbpl
;|***
;|*** int fbplmod;
;|*** int to_bpl = toBPL;
;|***
;|***
;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
;|*** memcpy(VDestPtr, VSrcPtr, 320);
; Line 27
*** 00001b a1 00 00 mov ax,WORD PTR _VDestPtr
*** 00001e 8b 16 02 00 mov dx,WORD PTR _VDestPtr+2
*** 000022 8b 1e 00 00 mov bx,WORD PTR _VSrcPtr
*** 000026 8b 36 02 00 mov si,WORD PTR _VSrcPtr+2
*** 00002a 1e push ds
*** 00002b 56 push si
*** 00002c 8b f8 mov di,ax
*** 00002e 8b f3 mov si,bx
*** 000030 8e c2 mov es,dx
*** 000032 1f pop ds
ASSUME DS: DGROUP
*** 000033 66 b9 50 00 00 00 mov ecx,80 ;00000050H
*** 000039 f3 rep
*** 00003a 66 a5 movsd
*** 00003c 1f pop ds
ASSUME DS: DGROUP
;|*** fbplmod = fromBPL % 16;
;|*** fseg = _FP_SEG(VSrcPtr);
; Line 29
*** 00003d a1 02 00 mov ax,WORD PTR _VSrcPtr+2
*** 000040 89 46 fc mov WORD PTR [bp-4],ax ;fseg
;|*** foff = _FP_OFF(VSrcPtr) + fbplmod;
; Line 30
*** 000043 8b 46 08 mov ax,WORD PTR [bp+8] ;fromBPL
*** 000046 b9 10 00 mov cx,16 ;0010H
*** 000049 99 cwd
*** 00004a f7 f9 idiv cx
*** 00004c 8b c2 mov ax,dx
*** 00004e 03 16 00 00 add dx,WORD PTR _VSrcPtr
*** 000052 89 56 f8 mov WORD PTR [bp-8],dx ;foff
;|*** if (fbplmod)
; Line 31
*** 000055 0b c0 or ax,ax
*** 000057 74 3b je SHORT $L289
;|*** {
;|*** while(--yy)
; Line 33
$FC273:
*** 000059 ff 4e fa dec WORD PTR [bp-6] ;yy
*** 00005c 74 72 je SHORT $I275
;|*** {
;|*** // VDestPtr += to_bpl;
;|*** // VSrcPtr = _MK_FP(_FP_SEG(VSrcPtr) + (from_bpl / 16), _FP_OFF(VSrcPtr) + (from_bpl % 16));
;|*** VDestPtr += 320;
; Line 37
*** 00005e 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
;|*** fseg += fbpl;
;|*** VSrcPtr = _MK_FP(fseg, foff);
; Line 39
*** 000064 8b 46 f6 mov ax,WORD PTR [bp-10] ;fbpl
*** 000067 01 46 fc add WORD PTR [bp-4],ax ;fseg
*** 00006a 8b 46 f8 mov ax,WORD PTR [bp-8] ;foff
*** 00006d 8b 56 fc mov dx,WORD PTR [bp-4] ;fseg
*** 000070 a3 00 00 mov WORD PTR _VSrcPtr,ax
*** 000073 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
;|*** memcpy(VDestPtr, VSrcPtr, 320);
; Line 41
*** 000077 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
*** 00007b 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
*** 00007f 1e push ds
*** 000080 56 push si
*** 000081 8b fb mov di,bx
*** 000083 8b f0 mov si,ax
*** 000085 07 pop es
*** 000086 8e da mov ds,dx
ASSUME DS: NOTHING
*** 000088 66 b9 50 00 00 00 mov ecx,80 ;00000050H
*** 00008e f3 rep
*** 00008f 66 a5 movsd
*** 000091 1f pop ds
ASSUME DS: DGROUP
;|*** }
; Line 42
*** 000092 eb c5 jmp SHORT $FC273
$L289:
;|*** }
;|*** else
;|*** {
;|*** while(--yy)
; Line 46
*** 000094 ff 4e fa dec WORD PTR [bp-6] ;yy
*** 000097 74 37 je SHORT $I275
;|*** {
;|*** VDestPtr += 320;
; Line 48
*** 000099 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
;|*** fseg += fbpl;
;|*** VSrcPtr = _MK_FP(fseg, foff);
; Line 50
*** 00009f 8b 46 f6 mov ax,WORD PTR [bp-10] ;fbpl
*** 0000a2 01 46 fc add WORD PTR [bp-4],ax ;fseg
*** 0000a5 8b 46 f8 mov ax,WORD PTR [bp-8] ;foff
*** 0000a8 8b 56 fc mov dx,WORD PTR [bp-4] ;fseg
*** 0000ab a3 00 00 mov WORD PTR _VSrcPtr,ax
*** 0000ae 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
;|*** memcpy(VDestPtr, VSrcPtr, 320);
; Line 52
*** 0000b2 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
*** 0000b6 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
*** 0000ba 1e push ds
*** 0000bb 56 push si
*** 0000bc 8b fb mov di,bx
*** 0000be 8b f0 mov si,ax
*** 0000c0 07 pop es
*** 0000c1 8e da mov ds,dx
ASSUME DS: NOTHING
*** 0000c3 66 b9 50 00 00 00 mov ecx,80 ;00000050H
*** 0000c9 f3 rep
*** 0000ca 66 a5 movsd
*** 0000cc 1f pop ds
ASSUME DS: DGROUP
;|*** }
; Line 53
*** 0000cd eb c5 jmp SHORT $L289
*** 0000cf 90 nop
;|*** }
; Line 54
$I275:
;|*** return(retcode);
; Line 55
*** 0000d0 33 c0 xor ax,ax
;|*** }
; Line 56
*** 0000d2 5e pop si
*** 0000d3 5f pop di
*** 0000d4 c9 leave
*** 0000d5 cb ret
_myVirtualVirtual ENDP
PUBLIC _myVirtualTo320x200Virtual
_myVirtualTo320x200Virtual PROC FAR ; COMDAT
;|***
;|*** //////////////////////////////////////////////////////////////////////////
;|*** //////////////////////////////////////////////////////////////////////////
;|*** void myVirtualTo320x200Virtual()
;|*** {
; Line 61
*** 000000 c8 06 00 00 enter 6,0
*** 000004 57 push di
*** 000005 56 push si
; yy = -4
; fseg = -2
; foff = -6
; segAdd = -8
;|*** register yy = 200;
; Line 62
*** 000006 c7 46 fc c8 00 mov WORD PTR [bp-4],200 ;00c8H ;yy
;|*** register unsigned fseg, foff;
;|*** register unsigned segAdd = VSegAdd;
;|***
;|*** memcpy(VDestPtr, VSrcPtr, 320);
; Line 66
*** 00000b a1 00 00 mov ax,WORD PTR _VDestPtr
*** 00000e 8b 16 02 00 mov dx,WORD PTR _VDestPtr+2
*** 000012 8b 1e 00 00 mov bx,WORD PTR _VSrcPtr
*** 000016 8b 36 02 00 mov si,WORD PTR _VSrcPtr+2
*** 00001a 1e push ds
*** 00001b 56 push si
*** 00001c 8b f8 mov di,ax
*** 00001e 8b f3 mov si,bx
*** 000020 8e c2 mov es,dx
*** 000022 1f pop ds
ASSUME DS: DGROUP
*** 000023 66 b9 50 00 00 00 mov ecx,80 ;00000050H
*** 000029 f3 rep
*** 00002a 66 a5 movsd
*** 00002c 1f pop ds
ASSUME DS: DGROUP
;|*** fseg = _FP_SEG(VSrcPtr);
; Line 67
*** 00002d a1 02 00 mov ax,WORD PTR _VSrcPtr+2
*** 000030 89 46 fe mov WORD PTR [bp-2],ax ;fseg
;|*** foff = _FP_OFF(VSrcPtr) + VOffAdd;
; Line 68
*** 000033 a1 00 00 mov ax,WORD PTR _VSrcPtr
*** 000036 03 06 00 00 add ax,WORD PTR _VOffAdd
*** 00003a 89 46 fa mov WORD PTR [bp-6],ax ;foff
;|*** // if (!foff)
;|*** // {
;|*** // while(--yy)
;|*** // {
;|*** // VDestPtr += 320;
;|*** // fseg += VSegAdd;
;|*** // VSrcPtr = _MK_FP(fseg, 0);
;|*** // memcpy(VDestPtr, VSrcPtr, 320);
;|*** // }
;|*** // }
;|*** // else
;|*** // {
;|*** while(--yy)
; Line 81
*** 00003d eb 35 jmp SHORT $L291
*** 00003f 90 nop
$FC286:
;|*** {
;|*** VDestPtr += 320;
; Line 83
*** 000040 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
;|*** fseg += VSegAdd;
;|*** VSrcPtr = _MK_FP(fseg, foff);
; Line 85
*** 000046 a1 00 00 mov ax,WORD PTR _VSegAdd
*** 000049 01 46 fe add WORD PTR [bp-2],ax ;fseg
*** 00004c 8b 46 fa mov ax,WORD PTR [bp-6] ;foff
*** 00004f 8b 56 fe mov dx,WORD PTR [bp-2] ;fseg
*** 000052 a3 00 00 mov WORD PTR _VSrcPtr,ax
*** 000055 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
;|*** memcpy(VDestPtr, VSrcPtr, 320);
; Line 86
*** 000059 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
*** 00005d 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
*** 000061 1e push ds
*** 000062 56 push si
*** 000063 8b fb mov di,bx
*** 000065 8b f0 mov si,ax
*** 000067 07 pop es
*** 000068 8e da mov ds,dx
ASSUME DS: NOTHING
*** 00006a 66 b9 50 00 00 00 mov ecx,80 ;00000050H
*** 000070 f3 rep
*** 000071 66 a5 movsd
*** 000073 1f pop ds
ASSUME DS: DGROUP
;|*** }
; Line 87
$L291:
*** 000074 ff 4e fc dec WORD PTR [bp-4] ;yy
*** 000077 75 c7 jne SHORT $FC286
;|*** // }
;|*** }
; Line 89
*** 000079 5e pop si
*** 00007a 5f pop di
*** 00007b c9 leave
*** 00007c cb ret
_myVirtualTo320x200Virtual ENDP
*** 00007d 90 nop
_DATA ENDS
END